package com.solution.admin.point.service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.solution.admin.point.entity.PointEntity;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;

/**
 * 积分信息接口service接口层
 * 
 * @author xu_cc
 * @date 2017-10-20 14:19:17
 */
public interface PointService {

    /**
     * 根据客户ID获取积分信息
     * 
     * @Title: getPointByCustomerId
     * @Description:(描述)
     * @param customerId
     * @return PointEntity
     * @author xu_cc
     * @throws Exception
     *             exception
     * @Date 创建时间：2017年10月23日 上午10:50:45
     */
    public PointEntity getPointByCustomerId(Long customerId);

    /**
     * 积分操作通用方法<br>
     * largerThenSetZero:true/false<br>
     * (扣减时，如果操作积分大于当前积分，则将当前积分置为0，<br>
     * 如果true，标识同意置为0，<br>
     * 如果是false，则扣减积分操作终止并抛出异常)
     * 
     * @param customerId
     *            客户ID
     * @param optFlag
     *            操作标识（1=加，0=减）
     * @param optType
     *            操作类型
     * @param optPoint
     *            操作积分
     * @param adjustReason
     *            操作原因
     * @param billCode
     *            单据编码
     * @param billTime
     *            单据时间
     * @param optUser
     *            操作人
     * @return int
     * @author xu_cc
     * @throws Exception
     *             exception
     * @Date 创建时间：2017年10月23日 上午10:43:49
     */
    public int doOperatePointCommon(Long customerId, Integer optFlag, String optType, BigDecimal optPoint, String adjustReason, String billCode,
            Date billTime, String optUser, boolean largerThenSetZero) throws Exception;

    /**
     * 保存积分信息
     * 
     * @param pointEntity
     *            积分信息实体
     * @return Long 返回插入积分信息记录ID
     * @author xu_cc
     * @date 2017-10-20 14:19:17
     */
    public long savePoint(PointEntity pointEntity);

    /**
     * 删除积分信息
     * 
     * @param
     * @return int 返回删除记录条数
     * @author xu_cc
     * @date 2017-10-20 14:19:17
     */
    public int deletePointById(long id);

    /**
     * 根据ID查询积分信息
     * 
     * @param id
     *            积分信息id
     * @return PointEntity 积分信息对象
     * @author xu_cc
     * @date 2017-10-20 14:19:17
     */
    public PointEntity getPointById(Long id);

    /**
     * 更新积分信息
     * 
     * @param PointEntity
     *            积分信息对象
     * @return int 更新是否成功，>1代表更新成功
     * @author xu_cc
     * @date 2017-10-20 14:19:17
     */
    public int updatePoint(PointEntity pointEntity);

    /**
     * 分页查询积分信息
     * 
     * @param pageParam
     *            分页参数
     * @param paramMap
     *            查询参数
     * @return PageBean 分页参数和分页数据
     * @author xu_cc
     * @date 2017-10-20 14:19:17
     */
    public PageBean listPointPage(PageParam pageParam, Map<String, Object> paramMap);

    /**
     * 根据条件查询积分信息
     * 
     * @param param
     * @return 积分信息列表
     * @author xu_cc
     * @date 2017-10-20 14:19:17
     */
    public List<PointEntity> listPoint(Map<String, Object> param);
    

}
